package reflect_constructor;

import java.lang.reflect.Constructor;

/**
 * @author 宋鑫宇
 * @version 1.0
 * 反射可以破坏封装性
 */
public class Test02 {
    //调用一个构造器的到一个类的对象返回
    @org.junit.jupiter.api.Test
    @SuppressWarnings("all")
    public void CC() throws Exception {
        //3.获取无参构造器
        Class c = AAA.class;
        Constructor cons = c.getDeclaredConstructor();
        System.out.println(cons.getName() + " " + cons.getParameterCount());
        //如果遇到私有构造器可以进行暴力反射
        cons.setAccessible(true);//权限被打开
        //调用构造器创建对象
        AAA a = (AAA) cons.newInstance();
        System.out.println(a);

        System.out.println("-----------------");
        //定位某个有参构造器
        Constructor cons1 = c.getDeclaredConstructor(String.class, int.class);
        System.out.println(cons1.getName() + " " + cons1.getParameterCount());

        //通过有参构造器创建对象
        AAA a1 = (AAA) cons1.newInstance("jack", 18);
        System.out.println(a1);

    }
}
